Bibliographic Collection

Data source: Clarivate Analytics Web of Science (http://apps.webofknowledge.com)

Data format: Plaintext

Query: TO = “Capacitated Arc Routing” OR “Capacitated General Routing”

Timespan: 2010-2019

Document Type: Articles, letters, review and proceedings papers

Query data: 12 May, 2019

Install and load bibliometrix R-package

# Stable version from CRAN (Comprehensive R Archive Network)
# if you need to execute the code, remove # from the beginning of the next line
# install.packages("bibliometrix")
# Most updated version from GitHub
# if you need to execute the code, remove # from the beginning of the next lines
# install.packages("devtools")
# devtools::install_github("massimoaria/bibliometrix")
library(bibliometrix)
package ‘bibliometrix’ was built under R version 3.5.2To cite bibliometrix in publications, please use:

Aria, M. & Cuccurullo, C. (2017) bibliometrix: An R-tool for comprehensive science mapping analysis, Journal of Informetrics, 11(4), pp 959-975, Elsevier.
                        

http:\\www.bibliometrix.org

                        
To start with the shiny web-interface, please digit:
biblioshiny()

Data Loading and Converting

# Loading txt or bib files into R environment
D <- readFiles("../data/arp_grp_2010_2019_references.bib")
# Converting the loaded files into a R bibliographic dataframe
M <- convert2df(D, dbsource="isi",format="bibtex")

Converting your isi collection into a bibliographic dataframe

Articles extracted   100 
Articles extracted   200 
Articles extracted   237 
Done!


Generating affiliation field tag AU_UN from C1:  Done!
write.csv(M, '../data/arp_grp_2010_2019_references.csv')

Section 1: Descriptive Analysis

Although bibliometrics is mainly known for quantifying the scientific production and measuring its quality and impact, it is also useful for displaying and analysing the intellectual, conceptual and social structures of research as well as their evolution and dynamical aspects.

In this way, bibliometrics aims to describe how specific disciplines, scientific domains, or research fields are structured and how they evolve over time. In other words, bibliometric methods help to map the science (so-called science mapping) and are very useful in the case of research synthesis, especially for the systematic ones.

Bibliometrics is an academic science founded on a set of statistical methods, which can be used to analyze scientific big data quantitatively and their evolution over time and discover information. Network structure is often used to model the interaction among authors, papers/documents/articles, references, keywords, etc.

Bibliometrix is an open-source software for automating the stages of data-analysis and data-visualization. After converting and uploading bibliographic data in R, Bibliometrix performs a descriptive analysis and different research-structure analysis.

Descriptive analysis provides some snapshots about the annual research development, the top “k” productive authors, papers, countries and most relevant keywords.

Main findings about the collection

#options(width=160)
results <- biblioAnalysis(M)
summary(results, k=10, pause=F, width=130)


Main Information about data

 Documents                             237 
 Sources (Journals, Books, etc.)       100 
 Keywords Plus (ID)                    207 
 Author's Keywords (DE)                421 
 Period                                2000 - 2019 
 Average citations per documents       16.09 

 Authors                               368 
 Author Appearances                    745 
 Authors of single-authored documents  11 
 Authors of multi-authored documents   357 
 Single-authored documents             12 

 Documents per Author                  0.644 
 Authors per Document                  1.55 
 Co-Authors per Documents              3.14 
 Collaboration Index                   1.59 
 
 Document types                     
 ARTICLE                         154 
 ARTICLE, BOOK CHAPTER           9 
 ARTICLE, DATA PAPER             1 
 ARTICLE, PROCEEDINGS PAPER      21 
 PROCEEDINGS PAPER               52 
 

Annual Scientific Production

Annual Percentage Growth Rate 5.297827 


Most Productive Authors


Top manuscripts per citations


Corresponding Author's Countries


SCP: Single Country Publications

MCP: Multiple Country Publications


Total Citations per Country


Most Relevant Sources


Most Relevant Keywords
plot(x=results, k=10, pause=F)

Most Cited References

CR <- citations(M, field = "article", sep = ";")
cbind(CR$Cited[1:20])
                                                                                   [,1]
GOLDEN BL, 1981, NETWORKS, V11, P305, DOI 10.1002/NET.3230110308.                   144
GOLDEN BL, 1983, COMPUT OPER RES, V10, P47, DOI 10.1016/0305-0548(83)90026-6.       100
HERTZ A, 2000, OPER RES, V48, P129, DOI 10.1287/OPRE.48.1.129.12455.                 88
LACOMME P, 2004, ANN OPER RES, V131, P159, DOI 10.1023/B:ANOR.0000039517.35989.6D.   88
BEULLENS P, 2003, EUR J OPER RES, V147, P629, DOI 10.1016/S0377-2217(02)00334-X.     82
BENAVENT E, 1992, NETWORKS, V22, P669, DOI 10.1002/NET.3230220706.                   78
DROR M., 2000, ARC ROUTING THEORY S.                                                 74
BELENGUER JM, 2003, COMPUT OPER RES, V30, P705, DOI 10.1016/S0305-0548(02)00046-1.   71
ULUSOY G, 1985, EUR J OPER RES, V22, P329, DOI 10.1016/0377-2217(85)90252-8.         71
BRANDAO J, 2008, COMPUT OPER RES, V35, P1112, DOI 10.1016/J.COR.2006.07.007.         70
EGLESE RW, 1994, DISCRETE APPL MATH, V48, P231, DOI 10.1016/0166-218X(92)00003-5.    60
LONGO H, 2006, COMPUT OPER RES, V33, P1823, DOI 10.1016/J.COR.2004.11.020.           56
EISELT HA, 1995, OPER RES, V43, P399, DOI 10.1287/OPRE.43.3.399.                     48
TANG K, 2009, IEEE T EVOLUT COMPUT, V13, P1151, DOI 10.1109/TEVC.2009.2023449.       48
LI LYO, 1996, J OPER RES SOC, V47, P217, DOI 10.1057/JORS.1996.20.                   47
HERTZ A, 2001, TRANSPORT SCI, V35, P425, DOI 10.1287/TRSC.35.4.425.10431.            45
BELENGUER JM, 2006, COMPUT OPER RES, V33, P3363, DOI 10.1016/J.COR.2005.02.009.      44
LACOMME P, 2001, LECT NOTES COMPUT SC, V2037, P473.                                  42
BALDACCI R, 2006, NETWORKS, V47, P52, DOI [10.1002/NET.20091, 10.1002/NET.20091].    41
HIRABAYASHI R, 1992, ASIA PAC J OPER RES, V9, P155.                                  38

Section 2: The Intellectual Structure of the field - Co-citation Analysis

Citation analysis is one of the main classic techniques in bibliometrics. It shows the structure of a specific field through the linkages between nodes (e.g. authors, papers, journal), while the edges can be differently interpretated depending on the network type, that are namely co-citation, direct citation, bibliographic coupling. Please see Aria, Cuccurullo (2017).

Below there are three examples.

First, a co-citation network that shows relations between cited-reference works (nodes).

Second, a co-citation network that uses cited-journals as unit of analysis.

The useful dimensions to comment the co-citation networks are: (i) centrality and peripherality of nodes, (ii) their proximity and distance, (iii) strength of ties, (iv) clusters, (iiv) bridging contributions.

Third, a historiograph is built on direct citations. It draws the intellectual linkages in a historical order. Cited works of thousands of authors contained in a collection of published scientific articles is sufficient for recostructing the historiographic structure of the field, calling out the basic works in it.

Article (References) co-citation analysis

Plot options:

  • n = 50 (the funxtion plots the main 50 cited references)

  • type = “fruchterman” (the network layout is generated using the Fruchterman-Reingold Algorithm)

  • size.cex = TRUE (the size of the vertices is proportional to their degree)

  • size = 20 (the max size of vertices)

  • remove.multiple=FALSE (multiple edges are not removed)

  • labelsize = 0.7 (defines the size of vertex labels)

  • edgesize = 10 (The thickness of the edges is proportional to their strength. Edgesize defines the max value of the thickness)

  • edges.min = 5 (plots only edges with a strength greater than or equal to 5)

  • all other arguments assume the default values

NetMatrix <- biblioNetwork(M, analysis = "coupling", network = "references", sep = ";")
net=networkPlot(NetMatrix, n = 50, Title = "Citation Network", type = "fruchterman", size.cex=TRUE, size=20, remove.multiple=FALSE, labelsize=0.7,edgesize = 10, edges.min=5)

NetMatrix <- biblioNetwork(M, analysis = "coupling", network = "references", sep = ";")
net=networkPlot(NetMatrix, n = 50, Title = "Citation Network", type = "fruchterman", size.cex=TRUE, size=20, remove.multiple=FALSE, labelsize=0.7,edgesize = 10, edges.min=5)

Descriptive analysis of Article co-citation network characteristics

#netstat <- networkStat(NetMatrix)
#summary(netstat,k=10)

Journal (Source) co-citation analysis

M=metaTagExtraction(M,"CR_SO",sep=";")
NetMatrix <- biblioNetwork(M, analysis = "co-citation", network = "sources", sep = ";")
net=networkPlot(NetMatrix, n = 50, Title = "Co-Citation Network", type = "auto", size.cex=TRUE, size=15, remove.multiple=FALSE, labelsize=0.7,edgesize = 10, edges.min=5)

Descriptive analysis of Journal co-citation network characteristics

netstat <- networkStat(NetMatrix)
summary(netstat,k=10)

Section 3: Historiograph - Direct citation linkages

histResults <- histNetwork(M, min.citations=quantile(M$TC,0.75), sep = ";")
Articles analysed   63 
net <- histPlot(histResults, n=20, size.cex=TRUE, size = 5, labelsize = 3, arrowsize = 0.5)

 Legend

Section 4: The conceptual structure - Co-Word Analysis

Co-word networks show the conceptual structure, that uncovers links between concepts through term co-occurences.

Conceptual structure is often used to understand the topics covered by scholars (so-called research front) and identify what are the most important and the most recent issues.

Dividing the whole timespan in different timeslices and comparing the conceptual structures is useful to analyze the evolution of topics over time.

Bibliometrix is able to analyze keywords, but also the terms in the articles’ titles and abstracts. It does it using network analysis or correspondance analysis (CA) or multiple correspondance analysis (MCA). CA and MCA visualise the conceptual structure in a two-dimensional plot.

Co-word Analysis through Keyword co-occurrences

Plot options:

  • normalize = “association” (the vertex similarities are normalized using association strength)

  • n = 50 (the function plots the main 50 cited references)

  • type = “fruchterman” (the network layout is generated using the Fruchterman-Reingold Algorithm)

  • size.cex = TRUE (the size of the vertices is proportional to their degree)

  • size = 20 (the max size of the vertices)

  • remove.multiple=FALSE (multiple edges are not removed)

  • labelsize = 3 (defines the max size of vertex labels)

  • label.cex = TRUE (The vertex label sizes are proportional to their degree)

  • edgesize = 10 (The thickness of the edges is proportional to their strength. Edgesize defines the max value of the thickness)

  • label.n = 30 (Labels are plotted only for the main 30 vertices)

  • edges.min = 25 (plots only edges with a strength greater than or equal to 2)

  • all other arguments assume the default values

NetMatrix <- biblioNetwork(M, analysis = "co-occurrences", network = "keywords", sep = ";")
net=networkPlot(NetMatrix, normalize="association", n = 50, Title = "Keyword Co-occurrences", type = "fruchterman", size.cex=TRUE, size=20, remove.multiple=F, edgesize = 10, labelsize=3,label.cex=TRUE,label.n=30,edges.min=2)

Descriptive analysis of keyword co-occurrences network characteristics

netstat <- networkStat(NetMatrix)
summary(netstat,k=10)

Co-word Analysis through Correspondence Analysis

CS <- conceptualStructure(M, method="CA", field="ID", minDegree=10, k.max = 8, stemming=f, labelsize=8,documents=20)

Section 5: Thematic Map

Co-word analysis draws clusters of keywords. They are considered as themes, whose density and centrality can be used in classifying themes and mapping in a two-dimensional diagram.

Thematic map is a very intuitive plot and we can analyze themes according to the quadrant in which they are placed: (1) upper-right quadrant: motor-themes; (2) lower-right quadrant: basic themes; (3) lower-left quadrant: emerging or disappearing themes; (4) upper-left quadrant: very specialized/niche themes.

Please see Cobo, M. J., L?pez-Herrera, A. G., Herrera-Viedma, E., & Herrera, F. (2011). An approach for detecting, quantifying, and visualizing the evolution of a research field: A practical application to the fuzzy sets theory field. Journal of Informetrics, 5(1), 146-166.


Map=thematicMap(M, field = "ID", n = 250, minfreq = 5,
  stemming = FALSE, size = 0.5, repel = TRUE)
plot(Map$map)

Cluster description

Clusters=Map$words[order(Map$words$Cluster,-Map$words$Occurrences),]
library(dplyr)
CL <- Clusters %>% group_by(.data$Cluster_Label) %>% top_n(5, .data$Occurrences)
CL

Section 6: The social structure - Collaboration Analysis

Collaboration networks show how authors, institutions (e.g. universities or departments) and countries relate to others in a specific field of research. For example, the first figure below is a co-author network. It discovers regular study groups, hidden groups of scholars, and pivotal authors. The second figure is called “Edu collaboration network” and uncovers relevant institutions in a specific research field and their relations.

Author collaboration network

NetMatrix <- biblioNetwork(M, analysis = "collaboration",  network = "authors", sep = ";")
net=networkPlot(NetMatrix,  n = 50, Title = "Author collaboration",type = "auto", size=10,size.cex=T,edgesize = 3,labelsize=0.6)

Descriptive analysis of author collaboration network characteristics

netstat <- networkStat(NetMatrix)
summary(netstat,k=15)

Edu collaboration network

NetMatrix <- biblioNetwork(M, analysis = "collaboration",  network = "universities", sep = ";")
net=networkPlot(NetMatrix,  n = 50, Title = "Edu collaboration",type = "auto", size=10,size.cex=T,edgesize = 3,labelsize=0.6)

Descriptive analysis of edu collaboration network characteristics

netstat <- networkStat(NetMatrix)
summary(netstat,k=15)

Country collaboration network

M <- metaTagExtraction(M, Field = "AU_CO", sep = ";")
NetMatrix <- biblioNetwork(M, analysis = "collaboration",  network = "countries", sep = ";")
net=networkPlot(NetMatrix,  n = dim(NetMatrix)[1], Title = "Country collaboration",type = "sphere", size=10,size.cex=T,edgesize = 1,labelsize=0.6, cluster="none")

Descriptive analysis of country collaboration network characteristics

netstat <- networkStat(NetMatrix)
summary(netstat,k=15)
LS0tCnRpdGxlOiAiU2NpZW5jZSBNYXBwaW5nIEFuYWx5c2lzIHdpdGggYmlibGlvbWV0cml4IFItcGFja2FnZTogQ0FSUCBhbmQgR1JQIgphdXRob3I6IEVsaWFzIEouIFdpbGxlbXNlCmRhdGU6IE1heSAxMiwgMjAxOQpvdXRwdXQ6CiAgaHRtbF9kb2N1bWVudDoKICAgIHRvYzogeWVzCiAgaHRtbF9ub3RlYm9vazoKICAgIHRoZW1lOiBsdW1lbgogICAgdG9jOiB5ZXMKICBwcmV0dHlkb2M6Omh0bWxfcHJldHR5OgogICAgdGhlbWU6IGhwc3RyCiAgICBoaWdobGlnaHQ6IGdpdGh1YgotLS0KCmBgYHtyIGluY2x1ZGU9RkFMU0V9CiMgSW5zdGFsbGF0aW9uIG9mIHNvbWUgdXNlZnVsIHBhY2thZ2VzCmlmKCFpc1RSVUUocmVxdWlyZSgicHJldHR5ZG9jIikpKXtpbnN0YWxsLnBhY2thZ2VzKCJwcmV0dHlkb2MiKX0KaWYoIWlzVFJVRShyZXF1aXJlKCJyaW8iKSkpe2luc3RhbGwucGFja2FnZXMoInJpbyIpfQpsaWJyYXJ5KHByZXR0eWRvYykKbGlicmFyeShyaW8pCmBgYAoKCiMgQmlibGlvZ3JhcGhpYyBDb2xsZWN0aW9uCgoqKkRhdGEgc291cmNlKio6ICAgQ2xhcml2YXRlIEFuYWx5dGljcyBXZWIgb2YgU2NpZW5jZSAoaHR0cDovL2FwcHMud2Vib2Zrbm93bGVkZ2UuY29tKQoKKipEYXRhIGZvcm1hdCoqOiAgIFBsYWludGV4dAoKKipRdWVyeSoqOiAgICAgICAgIFRPID0gIkNhcGFjaXRhdGVkIEFyYyBSb3V0aW5nIiBPUiAiQ2FwYWNpdGF0ZWQgR2VuZXJhbCBSb3V0aW5nIgoKKipUaW1lc3BhbioqOiAgICAgIDIwMTAtMjAxOQoKKipEb2N1bWVudCBUeXBlKio6IEFydGljbGVzLCBsZXR0ZXJzLCByZXZpZXcgYW5kIHByb2NlZWRpbmdzIHBhcGVycwoKKipRdWVyeSBkYXRhKio6ICAgIDEyIE1heSwgMjAxOQoKCiMgSW5zdGFsbCBhbmQgbG9hZCBiaWJsaW9tZXRyaXggUi1wYWNrYWdlCmBgYHtyIGxvYWQgYmlibGlvbWV0cml4fQojIFN0YWJsZSB2ZXJzaW9uIGZyb20gQ1JBTiAoQ29tcHJlaGVuc2l2ZSBSIEFyY2hpdmUgTmV0d29yaykKIyBpZiB5b3UgbmVlZCB0byBleGVjdXRlIHRoZSBjb2RlLCByZW1vdmUgIyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZQoKIyBpbnN0YWxsLnBhY2thZ2VzKCJiaWJsaW9tZXRyaXgiKQoKCiMgTW9zdCB1cGRhdGVkIHZlcnNpb24gZnJvbSBHaXRIdWIKIyBpZiB5b3UgbmVlZCB0byBleGVjdXRlIHRoZSBjb2RlLCByZW1vdmUgIyBmcm9tIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG5leHQgbGluZXMKCiMgaW5zdGFsbC5wYWNrYWdlcygiZGV2dG9vbHMiKQojIGRldnRvb2xzOjppbnN0YWxsX2dpdGh1YigibWFzc2ltb2FyaWEvYmlibGlvbWV0cml4IikKCmxpYnJhcnkoYmlibGlvbWV0cml4KQpgYGAKCgojIERhdGEgTG9hZGluZyBhbmQgQ29udmVydGluZwpgYGB7ciBEYXRhIGxvYWRpbmcsIHdhcm5pbmc9RkFMU0V9CiMgTG9hZGluZyB0eHQgb3IgYmliIGZpbGVzIGludG8gUiBlbnZpcm9ubWVudApEIDwtIHJlYWRGaWxlcygiLi4vZGF0YS9hcnBfZ3JwXzIwMTBfMjAxOV9yZWZlcmVuY2VzLmJpYiIpCgojIENvbnZlcnRpbmcgdGhlIGxvYWRlZCBmaWxlcyBpbnRvIGEgUiBiaWJsaW9ncmFwaGljIGRhdGFmcmFtZQpNIDwtIGNvbnZlcnQyZGYoRCwgZGJzb3VyY2U9ImlzaSIsZm9ybWF0PSJiaWJ0ZXgiKQpNMiA8LSBNCk0yCndyaXRlLmNzdihNMiwgJy4uL2RhdGEvYXJwX2dycF8yMDEwXzIwMTlfcmVmZXJlbmNlcy5jc3YnKQpgYGAKCmBgYHtyfQoKYGBgCgojIFNlY3Rpb24gMTogRGVzY3JpcHRpdmUgQW5hbHlzaXMKCkFsdGhvdWdoIGJpYmxpb21ldHJpY3MgaXMgbWFpbmx5IGtub3duIGZvciBxdWFudGlmeWluZyB0aGUgc2NpZW50aWZpYyBwcm9kdWN0aW9uIGFuZCBtZWFzdXJpbmcgaXRzIHF1YWxpdHkgYW5kIGltcGFjdCwgaXQgaXMgYWxzbyB1c2VmdWwgZm9yIGRpc3BsYXlpbmcgYW5kIGFuYWx5c2luZyB0aGUgaW50ZWxsZWN0dWFsLCBjb25jZXB0dWFsIGFuZCBzb2NpYWwgc3RydWN0dXJlcyBvZiByZXNlYXJjaCBhcyB3ZWxsIGFzIHRoZWlyIGV2b2x1dGlvbiBhbmQgZHluYW1pY2FsIGFzcGVjdHMuIAoKSW4gdGhpcyB3YXksIGJpYmxpb21ldHJpY3MgYWltcyB0byBkZXNjcmliZSBob3cgc3BlY2lmaWMgZGlzY2lwbGluZXMsIHNjaWVudGlmaWMgZG9tYWlucywgb3IgcmVzZWFyY2ggZmllbGRzIGFyZSBzdHJ1Y3R1cmVkIGFuZCBob3cgdGhleSBldm9sdmUgb3ZlciB0aW1lLiBJbiBvdGhlciB3b3JkcywgYmlibGlvbWV0cmljIG1ldGhvZHMgaGVscCB0byBtYXAgdGhlIHNjaWVuY2UgKHNvLWNhbGxlZCBzY2llbmNlIG1hcHBpbmcpIGFuZCBhcmUgdmVyeSB1c2VmdWwgaW4gdGhlIGNhc2Ugb2YgcmVzZWFyY2ggc3ludGhlc2lzLCBlc3BlY2lhbGx5IGZvciB0aGUgc3lzdGVtYXRpYyBvbmVzLgoKQmlibGlvbWV0cmljcyBpcyBhbiBhY2FkZW1pYyBzY2llbmNlIGZvdW5kZWQgb24gYSBzZXQgb2Ygc3RhdGlzdGljYWwgbWV0aG9kcywgd2hpY2ggY2FuIGJlIHVzZWQgdG8gYW5hbHl6ZSBzY2llbnRpZmljIGJpZyBkYXRhIHF1YW50aXRhdGl2ZWx5IGFuZCB0aGVpciBldm9sdXRpb24gb3ZlciB0aW1lIGFuZCBkaXNjb3ZlciBpbmZvcm1hdGlvbi4gTmV0d29yayBzdHJ1Y3R1cmUgaXMgb2Z0ZW4gdXNlZCB0byBtb2RlbCB0aGUgaW50ZXJhY3Rpb24gYW1vbmcgYXV0aG9ycywgcGFwZXJzL2RvY3VtZW50cy9hcnRpY2xlcywgcmVmZXJlbmNlcywga2V5d29yZHMsIGV0Yy4KCkJpYmxpb21ldHJpeCBpcyBhbiBvcGVuLXNvdXJjZSBzb2Z0d2FyZSBmb3IgYXV0b21hdGluZyB0aGUgc3RhZ2VzIG9mIGRhdGEtYW5hbHlzaXMgYW5kIGRhdGEtdmlzdWFsaXphdGlvbi4gQWZ0ZXIgY29udmVydGluZyBhbmQgdXBsb2FkaW5nIGJpYmxpb2dyYXBoaWMgZGF0YSBpbiBSLCBCaWJsaW9tZXRyaXggcGVyZm9ybXMgYSBkZXNjcmlwdGl2ZSBhbmFseXNpcyBhbmQgZGlmZmVyZW50IHJlc2VhcmNoLXN0cnVjdHVyZSBhbmFseXNpcy4KCkRlc2NyaXB0aXZlIGFuYWx5c2lzIHByb3ZpZGVzIHNvbWUgc25hcHNob3RzIGFib3V0IHRoZSBhbm51YWwgcmVzZWFyY2ggZGV2ZWxvcG1lbnQsIHRoZSB0b3AgImsiIHByb2R1Y3RpdmUgYXV0aG9ycywgcGFwZXJzLCBjb3VudHJpZXMgYW5kIG1vc3QgcmVsZXZhbnQga2V5d29yZHMuCgoKCiMjIE1haW4gZmluZGluZ3MgYWJvdXQgdGhlIGNvbGxlY3Rpb24KCmBgYHtyIERlc2NyaXB0aXZlIEFuYWx5c2lzLCBlY2hvPVRSVUUsIGNvbW1lbnQ9TkF9CiNvcHRpb25zKHdpZHRoPTE2MCkKcmVzdWx0cyA8LSBiaWJsaW9BbmFseXNpcyhNKQpzdW1tYXJ5KHJlc3VsdHMsIGs9MTAsIHBhdXNlPUYsIHdpZHRoPTEzMCkKcGxvdCh4PXJlc3VsdHMsIGs9MTAsIHBhdXNlPUYpCmBgYAoKIyMgTW9zdCBDaXRlZCBSZWZlcmVuY2VzCgpgYGB7ciBNb3N0IGNpdGVkIHJlZmVyZW5jZXMsICBjb21tZW50PU5BfQpDUiA8LSBjaXRhdGlvbnMoTSwgZmllbGQgPSAiYXJ0aWNsZSIsIHNlcCA9ICI7IikKY2JpbmQoQ1IkQ2l0ZWRbMToyMF0pCmBgYAoKCiMgU2VjdGlvbiAyOiBUaGUgSW50ZWxsZWN0dWFsIFN0cnVjdHVyZSBvZiB0aGUgZmllbGQgLSBDby1jaXRhdGlvbiBBbmFseXNpcwoKQ2l0YXRpb24gYW5hbHlzaXMgaXMgb25lIG9mIHRoZSBtYWluIGNsYXNzaWMgdGVjaG5pcXVlcyBpbiBiaWJsaW9tZXRyaWNzLiBJdCBzaG93cyB0aGUgc3RydWN0dXJlIG9mIGEgc3BlY2lmaWMgZmllbGQgdGhyb3VnaCB0aGUgbGlua2FnZXMgYmV0d2VlbiBub2RlcyAoZS5nLiBhdXRob3JzLCBwYXBlcnMsIGpvdXJuYWwpLCB3aGlsZSB0aGUgZWRnZXMgY2FuIGJlIGRpZmZlcmVudGx5IGludGVycHJldGF0ZWQgZGVwZW5kaW5nIG9uIHRoZSBuZXR3b3JrIHR5cGUsIHRoYXQgYXJlIG5hbWVseSBjby1jaXRhdGlvbiwgZGlyZWN0IGNpdGF0aW9uLCBiaWJsaW9ncmFwaGljIGNvdXBsaW5nLiBQbGVhc2Ugc2VlIEFyaWEsIEN1Y2N1cnVsbG8gKDIwMTcpLgoKQmVsb3cgdGhlcmUgYXJlIHRocmVlIGV4YW1wbGVzLgoKRmlyc3QsIGEgY28tY2l0YXRpb24gbmV0d29yayB0aGF0IHNob3dzIHJlbGF0aW9ucyBiZXR3ZWVuIGNpdGVkLXJlZmVyZW5jZSB3b3JrcyAobm9kZXMpLgoKU2Vjb25kLCBhIGNvLWNpdGF0aW9uIG5ldHdvcmsgdGhhdCB1c2VzIGNpdGVkLWpvdXJuYWxzIGFzIHVuaXQgb2YgYW5hbHlzaXMuCgpUaGUgdXNlZnVsIGRpbWVuc2lvbnMgdG8gY29tbWVudCB0aGUgY28tY2l0YXRpb24gbmV0d29ya3MgYXJlOiAoaSkgY2VudHJhbGl0eSBhbmQgcGVyaXBoZXJhbGl0eSBvZiBub2RlcywgKGlpKSB0aGVpciBwcm94aW1pdHkgYW5kIGRpc3RhbmNlLCAoaWlpKSBzdHJlbmd0aCBvZiB0aWVzLCAoaXYpIGNsdXN0ZXJzLCAoaWl2KSBicmlkZ2luZyBjb250cmlidXRpb25zLgoKVGhpcmQsIGEgaGlzdG9yaW9ncmFwaCBpcyBidWlsdCBvbiBkaXJlY3QgY2l0YXRpb25zLiBJdCBkcmF3cyB0aGUgaW50ZWxsZWN0dWFsIGxpbmthZ2VzIGluIGEgaGlzdG9yaWNhbCBvcmRlci4gQ2l0ZWQgd29ya3Mgb2YKdGhvdXNhbmRzIG9mIGF1dGhvcnMgY29udGFpbmVkIGluIGEgY29sbGVjdGlvbiBvZiBwdWJsaXNoZWQgc2NpZW50aWZpYyBhcnRpY2xlcyBpcyBzdWZmaWNpZW50IGZvciByZWNvc3RydWN0aW5nIHRoZSBoaXN0b3Jpb2dyYXBoaWMgc3RydWN0dXJlIG9mIHRoZSBmaWVsZCwgY2FsbGluZyBvdXQgdGhlIGJhc2ljIHdvcmtzIGluIGl0LgoKCiMjIEFydGljbGUgKFJlZmVyZW5jZXMpIGNvLWNpdGF0aW9uIGFuYWx5c2lzCioqUGxvdCBvcHRpb25zKio6CgoqIG4gPSA1MCAodGhlIGZ1bnh0aW9uIHBsb3RzIHRoZSBtYWluIDUwIGNpdGVkIHJlZmVyZW5jZXMpCgoqIHR5cGUgPSAiZnJ1Y2h0ZXJtYW4iICh0aGUgbmV0d29yayBsYXlvdXQgaXMgZ2VuZXJhdGVkIHVzaW5nIHRoZSBGcnVjaHRlcm1hbi1SZWluZ29sZCBBbGdvcml0aG0pCgoqIHNpemUuY2V4ID0gVFJVRSAodGhlIHNpemUgb2YgdGhlIHZlcnRpY2VzIGlzIHByb3BvcnRpb25hbCB0byB0aGVpciBkZWdyZWUpCgoqIHNpemUgPSAyMCAodGhlIG1heCBzaXplIG9mIHZlcnRpY2VzKQoKKiByZW1vdmUubXVsdGlwbGU9RkFMU0UgKG11bHRpcGxlIGVkZ2VzIGFyZSBub3QgcmVtb3ZlZCkKCiogbGFiZWxzaXplID0gMC43IChkZWZpbmVzIHRoZSBzaXplIG9mIHZlcnRleCBsYWJlbHMpCgoqIGVkZ2VzaXplID0gMTAgKFRoZSB0aGlja25lc3Mgb2YgdGhlIGVkZ2VzIGlzIHByb3BvcnRpb25hbCB0byB0aGVpciBzdHJlbmd0aC4gRWRnZXNpemUgZGVmaW5lcyB0aGUgbWF4IHZhbHVlIG9mIHRoZSB0aGlja25lc3MpCgoqIGVkZ2VzLm1pbiA9IDUgKHBsb3RzIG9ubHkgZWRnZXMgd2l0aCBhIHN0cmVuZ3RoIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byA1KQoKKiBhbGwgb3RoZXIgYXJndW1lbnRzIGFzc3VtZSB0aGUgZGVmYXVsdCB2YWx1ZXMKCmBgYHtyIENvLWNpdGF0aW9uIG5ldHdvcmssIGNvbW1lbnQ9TkEsIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0xMH0KTmV0TWF0cml4IDwtIGJpYmxpb05ldHdvcmsoTSwgYW5hbHlzaXMgPSAiY291cGxpbmciLCBuZXR3b3JrID0gInJlZmVyZW5jZXMiLCBzZXAgPSAiOyIpCm5ldD1uZXR3b3JrUGxvdChOZXRNYXRyaXgsIG4gPSA1MCwgVGl0bGUgPSAiQ2l0YXRpb24gTmV0d29yayIsIHR5cGUgPSAiZnJ1Y2h0ZXJtYW4iLCBzaXplLmNleD1UUlVFLCBzaXplPTIwLCByZW1vdmUubXVsdGlwbGU9RkFMU0UsIGxhYmVsc2l6ZT0wLjcsZWRnZXNpemUgPSAxMCwgZWRnZXMubWluPTUpCmBgYAoKRGVzY3JpcHRpdmUgYW5hbHlzaXMgb2YgQXJ0aWNsZSBjby1jaXRhdGlvbiBuZXR3b3JrIGNoYXJhY3RlcmlzdGljcwpgYGB7ciBDby1jaXRhdGlvbiBuZXQgc3RhdCwgY29tbWVudD1OQX0KI25ldHN0YXQgPC0gbmV0d29ya1N0YXQoTmV0TWF0cml4KQojc3VtbWFyeShuZXRzdGF0LGs9MTApCmBgYAoKCiMjIEpvdXJuYWwgKFNvdXJjZSkgY28tY2l0YXRpb24gYW5hbHlzaXMKCmBgYHtyIENvLWNpdGF0aW9uIHNvdXJjZSBuZXR3b3JrLCBjb21tZW50PU5BLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTB9Ck09bWV0YVRhZ0V4dHJhY3Rpb24oTSwiQ1JfU08iLHNlcD0iOyIpCk5ldE1hdHJpeCA8LSBiaWJsaW9OZXR3b3JrKE0sIGFuYWx5c2lzID0gImNvLWNpdGF0aW9uIiwgbmV0d29yayA9ICJzb3VyY2VzIiwgc2VwID0gIjsiKQpuZXQ9bmV0d29ya1Bsb3QoTmV0TWF0cml4LCBuID0gNTAsIFRpdGxlID0gIkNvLUNpdGF0aW9uIE5ldHdvcmsiLCB0eXBlID0gImF1dG8iLCBzaXplLmNleD1UUlVFLCBzaXplPTE1LCByZW1vdmUubXVsdGlwbGU9RkFMU0UsIGxhYmVsc2l6ZT0wLjcsZWRnZXNpemUgPSAxMCwgZWRnZXMubWluPTUpCmBgYAoKRGVzY3JpcHRpdmUgYW5hbHlzaXMgb2YgSm91cm5hbCBjby1jaXRhdGlvbiBuZXR3b3JrIGNoYXJhY3RlcmlzdGljcwpgYGB7ciBTbyBDby1jaXRhdGlvbiBuZXQgc3RhdCwgY29tbWVudD1OQX0KbmV0c3RhdCA8LSBuZXR3b3JrU3RhdChOZXRNYXRyaXgpCnN1bW1hcnkobmV0c3RhdCxrPTEwKQpgYGAKCgojIFNlY3Rpb24gMzogSGlzdG9yaW9ncmFwaCAtIERpcmVjdCBjaXRhdGlvbiBsaW5rYWdlcwoKCmBgYHtyIERpcmVjdCBjaXRhdGlvbiBuZXR3b3JrLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTB9Cmhpc3RSZXN1bHRzIDwtIGhpc3ROZXR3b3JrKE0sIG1pbi5jaXRhdGlvbnM9cXVhbnRpbGUoTSRUQywwLjc1KSwgc2VwID0gIjsiKQpgYGAKCmBgYHtyIEhpc3RvcmlvZ3JhcGgsIGNvbW1lbnQ9TkEsIGZpZy5oZWlnaHQ9NyxmaWcud2lkdGg9MTB9Cm9wdGlvbnMod2lkdGggPSAxMDApCm5ldCA8LSBoaXN0UGxvdChoaXN0UmVzdWx0cywgbj0yMCwgc2l6ZS5jZXg9VFJVRSwgc2l6ZSA9IDUsIGxhYmVsc2l6ZSA9IDMsIGFycm93c2l6ZSA9IDAuNSkKYGBgCgoKIyBTZWN0aW9uIDQ6IFRoZSBjb25jZXB0dWFsIHN0cnVjdHVyZSAtIENvLVdvcmQgQW5hbHlzaXMKCkNvLXdvcmQgbmV0d29ya3Mgc2hvdyB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmUsIHRoYXQgdW5jb3ZlcnMgbGlua3MgYmV0d2VlbiBjb25jZXB0cyB0aHJvdWdoIHRlcm0gY28tb2NjdXJlbmNlcy4KCkNvbmNlcHR1YWwgc3RydWN0dXJlIGlzIG9mdGVuIHVzZWQgdG8gdW5kZXJzdGFuZCB0aGUgdG9waWNzIGNvdmVyZWQgYnkgc2Nob2xhcnMgKHNvLWNhbGxlZCByZXNlYXJjaCBmcm9udCkgYW5kIGlkZW50aWZ5IHdoYXQgYXJlIHRoZSBtb3N0IGltcG9ydGFudCBhbmQgdGhlIG1vc3QgcmVjZW50IGlzc3Vlcy4KCkRpdmlkaW5nIHRoZSB3aG9sZSB0aW1lc3BhbiBpbiBkaWZmZXJlbnQgdGltZXNsaWNlcyBhbmQgY29tcGFyaW5nIHRoZSBjb25jZXB0dWFsIHN0cnVjdHVyZXMgaXMgdXNlZnVsIHRvIGFuYWx5emUgdGhlIGV2b2x1dGlvbiBvZiB0b3BpY3Mgb3ZlciB0aW1lLgoKQmlibGlvbWV0cml4IGlzIGFibGUgdG8gYW5hbHl6ZSBrZXl3b3JkcywgYnV0IGFsc28gdGhlIHRlcm1zIGluIHRoZSBhcnRpY2xlcycgdGl0bGVzIGFuZCBhYnN0cmFjdHMuIEl0IGRvZXMgaXQgdXNpbmcgbmV0d29yayBhbmFseXNpcyBvciBjb3JyZXNwb25kYW5jZSBhbmFseXNpcyAoQ0EpIG9yIG11bHRpcGxlIGNvcnJlc3BvbmRhbmNlIGFuYWx5c2lzIChNQ0EpLiBDQSBhbmQgTUNBIHZpc3VhbGlzZSB0aGUgY29uY2VwdHVhbCBzdHJ1Y3R1cmUgaW4gYSB0d28tZGltZW5zaW9uYWwgcGxvdC4KIAoKIyMgQ28td29yZCBBbmFseXNpcyB0aHJvdWdoIEtleXdvcmQgY28tb2NjdXJyZW5jZXMKCioqUGxvdCBvcHRpb25zKio6CgoqIG5vcm1hbGl6ZSA9ICJhc3NvY2lhdGlvbiIgKHRoZSB2ZXJ0ZXggc2ltaWxhcml0aWVzIGFyZSBub3JtYWxpemVkIHVzaW5nIGFzc29jaWF0aW9uIHN0cmVuZ3RoKQoKKiBuID0gNTAgKHRoZSBmdW5jdGlvbiBwbG90cyB0aGUgbWFpbiA1MCBjaXRlZCByZWZlcmVuY2VzKQoKKiB0eXBlID0gImZydWNodGVybWFuIiAodGhlIG5ldHdvcmsgbGF5b3V0IGlzIGdlbmVyYXRlZCB1c2luZyB0aGUgRnJ1Y2h0ZXJtYW4tUmVpbmdvbGQgQWxnb3JpdGhtKQoKKiBzaXplLmNleCA9IFRSVUUgKHRoZSBzaXplIG9mIHRoZSB2ZXJ0aWNlcyBpcyBwcm9wb3J0aW9uYWwgdG8gdGhlaXIgZGVncmVlKQoKKiBzaXplID0gMjAgKHRoZSBtYXggc2l6ZSBvZiB0aGUgdmVydGljZXMpIAoKKiByZW1vdmUubXVsdGlwbGU9RkFMU0UgKG11bHRpcGxlIGVkZ2VzIGFyZSBub3QgcmVtb3ZlZCkKCiogbGFiZWxzaXplID0gMyAoZGVmaW5lcyB0aGUgbWF4IHNpemUgb2YgdmVydGV4IGxhYmVscykKCiogbGFiZWwuY2V4ID0gVFJVRSAoVGhlIHZlcnRleCBsYWJlbCBzaXplcyBhcmUgcHJvcG9ydGlvbmFsIHRvIHRoZWlyIGRlZ3JlZSkKCiogZWRnZXNpemUgPSAxMCAoVGhlIHRoaWNrbmVzcyBvZiB0aGUgZWRnZXMgaXMgcHJvcG9ydGlvbmFsIHRvIHRoZWlyIHN0cmVuZ3RoLiBFZGdlc2l6ZSBkZWZpbmVzIHRoZSBtYXggdmFsdWUgb2YgdGhlIHRoaWNrbmVzcykKCiogbGFiZWwubiA9IDMwIChMYWJlbHMgYXJlIHBsb3R0ZWQgb25seSBmb3IgdGhlIG1haW4gMzAgdmVydGljZXMpCgoqIGVkZ2VzLm1pbiA9IDI1IChwbG90cyBvbmx5IGVkZ2VzIHdpdGggYSBzdHJlbmd0aCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gMikKCiogYWxsIG90aGVyIGFyZ3VtZW50cyBhc3N1bWUgdGhlIGRlZmF1bHQgdmFsdWVzCgpgYGB7ciBLZXl3b3JkIGNvLW9jY3VycmVuY2VzLCBjb21tZW50PU5BLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTB9Ck5ldE1hdHJpeCA8LSBiaWJsaW9OZXR3b3JrKE0sIGFuYWx5c2lzID0gImNvLW9jY3VycmVuY2VzIiwgbmV0d29yayA9ICJrZXl3b3JkcyIsIHNlcCA9ICI7IikKbmV0PW5ldHdvcmtQbG90KE5ldE1hdHJpeCwgbm9ybWFsaXplPSJhc3NvY2lhdGlvbiIsIG4gPSA1MCwgVGl0bGUgPSAiS2V5d29yZCBDby1vY2N1cnJlbmNlcyIsIHR5cGUgPSAiZnJ1Y2h0ZXJtYW4iLCBzaXplLmNleD1UUlVFLCBzaXplPTIwLCByZW1vdmUubXVsdGlwbGU9RiwgZWRnZXNpemUgPSAxMCwgbGFiZWxzaXplPTMsbGFiZWwuY2V4PVRSVUUsbGFiZWwubj0zMCxlZGdlcy5taW49MikKYGBgCgpEZXNjcmlwdGl2ZSBhbmFseXNpcyBvZiBrZXl3b3JkIGNvLW9jY3VycmVuY2VzIG5ldHdvcmsgY2hhcmFjdGVyaXN0aWNzCgpgYGB7ciBLZXl3b3JkIG5ldCBzdGF0LCBjb21tZW50PU5BfQpuZXRzdGF0IDwtIG5ldHdvcmtTdGF0KE5ldE1hdHJpeCkKc3VtbWFyeShuZXRzdGF0LGs9MTApCmBgYAoKCiMjIENvLXdvcmQgQW5hbHlzaXMgdGhyb3VnaCBDb3JyZXNwb25kZW5jZSBBbmFseXNpcwoKYGBge3IgQ28td29yZCBBbmFseXNpcywgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTEwfQpDUyA8LSBjb25jZXB0dWFsU3RydWN0dXJlKE0sIG1ldGhvZD0iQ0EiLCBmaWVsZD0iSUQiLCBtaW5EZWdyZWU9MTAsIGsubWF4ID0gOCwgc3RlbW1pbmc9ZiwgbGFiZWxzaXplPTgsZG9jdW1lbnRzPTIwKQpgYGAKCgoKIyBTZWN0aW9uIDU6IFRoZW1hdGljIE1hcAoKQ28td29yZCBhbmFseXNpcyBkcmF3cyBjbHVzdGVycyBvZiBrZXl3b3Jkcy4gVGhleSBhcmUgY29uc2lkZXJlZCBhcyB0aGVtZXMsIHdob3NlIGRlbnNpdHkgYW5kIGNlbnRyYWxpdHkgY2FuIGJlIHVzZWQgaW4gY2xhc3NpZnlpbmcgdGhlbWVzIGFuZCBtYXBwaW5nIGluIGEgdHdvLWRpbWVuc2lvbmFsIGRpYWdyYW0uCgpUaGVtYXRpYyBtYXAgaXMgYSB2ZXJ5IGludHVpdGl2ZSBwbG90IGFuZCB3ZSBjYW4gYW5hbHl6ZSB0aGVtZXMgYWNjb3JkaW5nIHRvIHRoZSBxdWFkcmFudCBpbiB3aGljaCB0aGV5IGFyZSBwbGFjZWQ6ICgxKSB1cHBlci1yaWdodCBxdWFkcmFudDogbW90b3ItdGhlbWVzOyAoMikgbG93ZXItcmlnaHQgcXVhZHJhbnQ6IGJhc2ljIHRoZW1lczsgKDMpIGxvd2VyLWxlZnQgcXVhZHJhbnQ6IGVtZXJnaW5nIG9yIGRpc2FwcGVhcmluZyB0aGVtZXM7ICg0KSB1cHBlci1sZWZ0IHF1YWRyYW50OiB2ZXJ5IHNwZWNpYWxpemVkL25pY2hlIHRoZW1lcy4KClBsZWFzZSBzZWUgQ29ibywgTS4gSi4sIEw/cGV6LUhlcnJlcmEsIEEuIEcuLCBIZXJyZXJhLVZpZWRtYSwgRS4sICYgSGVycmVyYSwgRi4gKDIwMTEpLiBBbiBhcHByb2FjaCBmb3IgZGV0ZWN0aW5nLCBxdWFudGlmeWluZywgYW5kIHZpc3VhbGl6aW5nIHRoZSBldm9sdXRpb24gb2YgYSByZXNlYXJjaCBmaWVsZDogQSBwcmFjdGljYWwgYXBwbGljYXRpb24gdG8gdGhlIGZ1enp5IHNldHMgdGhlb3J5IGZpZWxkLiBKb3VybmFsIG9mIEluZm9ybWV0cmljcywgNSgxKSwgMTQ2LTE2Ni4KCgoKYGBge3IgVGhlbWF0aWNNYXAsIGVjaG89VFJVRSwgZmlnLmhlaWdodD05LCBmaWcud2lkdGg9OX0KCk1hcD10aGVtYXRpY01hcChNLCBmaWVsZCA9ICJJRCIsIG4gPSAyNTAsIG1pbmZyZXEgPSA1LAogIHN0ZW1taW5nID0gRkFMU0UsIHNpemUgPSAwLjUsIHJlcGVsID0gVFJVRSkKcGxvdChNYXAkbWFwKQpgYGAKCgpDbHVzdGVyIGRlc2NyaXB0aW9uCmBgYHtyfQpDbHVzdGVycz1NYXAkd29yZHNbb3JkZXIoTWFwJHdvcmRzJENsdXN0ZXIsLU1hcCR3b3JkcyRPY2N1cnJlbmNlcyksXQpsaWJyYXJ5KGRwbHlyKQpDTCA8LSBDbHVzdGVycyAlPiUgZ3JvdXBfYnkoLmRhdGEkQ2x1c3Rlcl9MYWJlbCkgJT4lIHRvcF9uKDUsIC5kYXRhJE9jY3VycmVuY2VzKQpDTApgYGAKCgojIFNlY3Rpb24gNjogVGhlIHNvY2lhbCBzdHJ1Y3R1cmUgLSBDb2xsYWJvcmF0aW9uIEFuYWx5c2lzCgpDb2xsYWJvcmF0aW9uIG5ldHdvcmtzIHNob3cgaG93IGF1dGhvcnMsIGluc3RpdHV0aW9ucyAoZS5nLiB1bml2ZXJzaXRpZXMgb3IgZGVwYXJ0bWVudHMpIGFuZCBjb3VudHJpZXMgcmVsYXRlIHRvIG90aGVycyBpbiBhIHNwZWNpZmljIGZpZWxkIG9mIHJlc2VhcmNoLiBGb3IgZXhhbXBsZSwgdGhlIGZpcnN0IGZpZ3VyZSBiZWxvdyBpcyBhIGNvLWF1dGhvciBuZXR3b3JrLiBJdCBkaXNjb3ZlcnMgcmVndWxhciBzdHVkeSBncm91cHMsIGhpZGRlbiBncm91cHMgb2Ygc2Nob2xhcnMsIGFuZCBwaXZvdGFsIGF1dGhvcnMuIFRoZSBzZWNvbmQgZmlndXJlIGlzIGNhbGxlZCAiRWR1IGNvbGxhYm9yYXRpb24gbmV0d29yayIgYW5kIHVuY292ZXJzIHJlbGV2YW50IGluc3RpdHV0aW9ucyBpbiBhIHNwZWNpZmljIHJlc2VhcmNoIGZpZWxkIGFuZCB0aGVpciByZWxhdGlvbnMuCgojIyBBdXRob3IgY29sbGFib3JhdGlvbiBuZXR3b3JrCmBgYHtyLCBBdSBjb2xsYWJvcmF0aW9uIG5ldHdvcmssIGZpZy5oZWlnaHQ9MTAsIGZpZy53aWR0aD0xMH0KTmV0TWF0cml4IDwtIGJpYmxpb05ldHdvcmsoTSwgYW5hbHlzaXMgPSAiY29sbGFib3JhdGlvbiIsICBuZXR3b3JrID0gImF1dGhvcnMiLCBzZXAgPSAiOyIpCm5ldD1uZXR3b3JrUGxvdChOZXRNYXRyaXgsICBuID0gNTAsIFRpdGxlID0gIkF1dGhvciBjb2xsYWJvcmF0aW9uIix0eXBlID0gImF1dG8iLCBzaXplPTEwLHNpemUuY2V4PVQsZWRnZXNpemUgPSAzLGxhYmVsc2l6ZT0wLjYpCmBgYAoKRGVzY3JpcHRpdmUgYW5hbHlzaXMgb2YgYXV0aG9yIGNvbGxhYm9yYXRpb24gbmV0d29yayBjaGFyYWN0ZXJpc3RpY3MKCmBgYHtyIEF1IGNvbGwgc3RhdCwgY29tbWVudD1OQX0KbmV0c3RhdCA8LSBuZXR3b3JrU3RhdChOZXRNYXRyaXgpCnN1bW1hcnkobmV0c3RhdCxrPTE1KQpgYGAKCgojIyBFZHUgY29sbGFib3JhdGlvbiBuZXR3b3JrCmBgYHtyLCBFZHUgY29sbGFib3JhdGlvbiBuZXR3b3JrLCBmaWcuaGVpZ2h0PTEwLCBmaWcud2lkdGg9MTB9Ck5ldE1hdHJpeCA8LSBiaWJsaW9OZXR3b3JrKE0sIGFuYWx5c2lzID0gImNvbGxhYm9yYXRpb24iLCAgbmV0d29yayA9ICJ1bml2ZXJzaXRpZXMiLCBzZXAgPSAiOyIpCm5ldD1uZXR3b3JrUGxvdChOZXRNYXRyaXgsICBuID0gNTAsIFRpdGxlID0gIkVkdSBjb2xsYWJvcmF0aW9uIix0eXBlID0gImF1dG8iLCBzaXplPTEwLHNpemUuY2V4PVQsZWRnZXNpemUgPSAzLGxhYmVsc2l6ZT0wLjYpCmBgYAoKRGVzY3JpcHRpdmUgYW5hbHlzaXMgb2YgZWR1IGNvbGxhYm9yYXRpb24gbmV0d29yayBjaGFyYWN0ZXJpc3RpY3MKCmBgYHtyIEVkdSBjb2xsIHN0YXQsIGNvbW1lbnQ9TkF9Cm5ldHN0YXQgPC0gbmV0d29ya1N0YXQoTmV0TWF0cml4KQpzdW1tYXJ5KG5ldHN0YXQsaz0xNSkKYGBgCgoKIyMgQ291bnRyeSBjb2xsYWJvcmF0aW9uIG5ldHdvcmsKYGBge3IsIENvIGNvbGxhYm9yYXRpb24gbmV0d29yaywgZmlnLmhlaWdodD0xMCwgZmlnLndpZHRoPTEwfQpNIDwtIG1ldGFUYWdFeHRyYWN0aW9uKE0sIEZpZWxkID0gIkFVX0NPIiwgc2VwID0gIjsiKQpOZXRNYXRyaXggPC0gYmlibGlvTmV0d29yayhNLCBhbmFseXNpcyA9ICJjb2xsYWJvcmF0aW9uIiwgIG5ldHdvcmsgPSAiY291bnRyaWVzIiwgc2VwID0gIjsiKQpuZXQ9bmV0d29ya1Bsb3QoTmV0TWF0cml4LCAgbiA9IGRpbShOZXRNYXRyaXgpWzFdLCBUaXRsZSA9ICJDb3VudHJ5IGNvbGxhYm9yYXRpb24iLHR5cGUgPSAic3BoZXJlIiwgc2l6ZT0xMCxzaXplLmNleD1ULGVkZ2VzaXplID0gMSxsYWJlbHNpemU9MC42LCBjbHVzdGVyPSJub25lIikKYGBgCgpEZXNjcmlwdGl2ZSBhbmFseXNpcyBvZiBjb3VudHJ5IGNvbGxhYm9yYXRpb24gbmV0d29yayBjaGFyYWN0ZXJpc3RpY3MKCmBgYHtyIENvIGNvbGwgc3RhdCwgY29tbWVudD1OQX0KbmV0c3RhdCA8LSBuZXR3b3JrU3RhdChOZXRNYXRyaXgpCnN1bW1hcnkobmV0c3RhdCxrPTE1KQpgYGAKCgoKCgoKCg==